--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
recipes/python3/__init__.py HEAD (8b8a5035) Text, 17.48 KB
Tff7b72import T7ee787glob
Tff7b72import T7ee787sh
Tff7b72import T7ee787subprocess
Tff7b72from T7ee787os Tff7b72import Te6edf3environTb4b4b4, Te6edf3utime
Tff7b72from T7ee787osT7ee787.T7ee787path Tff7b72import Te6edf3dirnameTb4b4b4, Te6edf3existsTb4b4b4, Te6edf3join
Tff7b72from T7ee787pathlib Tff7b72import Te6edf3Path
Tff7b72import T7ee787shutil
Tff7b72from T7ee787pythonforandroidT7ee787.T7ee787logger Tff7b72import Te6edf3infoTb4b4b4, Te6edf3warningTb4b4b4, Te6edf3shprint
Tff7b72from T7ee787pythonforandroidT7ee787.T7ee787patching Tff7b72import Te6edf3version_starts_with
Tff7b72from T7ee787pythonforandroidT7ee787.T7ee787recipe Tff7b72import Te6edf3RecipeTb4b4b4, Te6edf3TargetPythonRecipe
Tff7b72from T7ee787pythonforandroidT7ee787.T7ee787util Tff7b72import Tb4b4b4(
Te6edf3current_directoryTb4b4b4,
Te6edf3ensure_dirTb4b4b4,
Te6edf3walk_valid_filensTb4b4b4,
Te6edf3BuildInterruptingExceptionTb4b4b4,
Tb4b4b4)
Te6edf3NDK_API_LOWER_THAN_SUPPORTED_MESSAGE Tff7b72= Tb4b4b4(
Ta5d6ff'Ta5d6ffTarget ndk-api is Tffd700{ndk_api}Ta5d6ff, Ta5d6ff'
Ta5d6ff'Ta5d6ffbut the python3 recipe supports only Tffd700{min_ndk_api}Ta5d6ff+Ta5d6ff'
Tb4b4b4)
Tff7b72class T56d364Python3RecipeTb4b4b4(Te6edf3TargetPythonRecipeTb4b4b4)Tb4b4b4:
T8b949e'''
The python3's recipe
^^^^^^^^^^^^^^^^^^^^
The python 3 recipe can be built with some extra python modules, but to do
so, we need some libraries. By default, we ship the python3 recipe with
some common libraries, defined in ``depends``. We also support some optional
libraries, which are less common that the ones defined in ``depends``, so
we added them as optional dependencies (``opt_depends``).
Below you have a relationship between the python modules and the recipe
libraries::
- _ctypes: you must add the recipe for ``libffi``.
- _sqlite3: you must add the recipe for ``sqlite3``.
- _ssl: you must add the recipe for ``openssl``.
- _bz2: you must add the recipe for ``libbz2`` (optional).
- _lzma: you must add the recipe for ``liblzma`` (optional).
.. note:: This recipe can be built only against API 21+.
.. versionchanged:: 2019.10.06.post0
- Refactored from deleted class ``python.GuestPythonRecipe`` into here
- Added optional dependencies: :mod:`~pythonforandroid.recipes.libbz2`
and :mod:`~pythonforandroid.recipes.liblzma`
.. versionchanged:: 0.6.0
Refactored into class
:class:`~pythonforandroid.python.GuestPythonRecipe`
'''
Te6edf3version Tff7b72= Ta5d6ff'Ta5d6ff3.11.5Ta5d6ff'
Te6edf3url Tff7b72= Ta5d6ff'Ta5d6ffhttps://www.python.org/ftp/python/Tffd700{version}Ta5d6ff/Python-Tffd700{version}Ta5d6ff.tgzTa5d6ff'
Te6edf3name Tff7b72= Ta5d6ff'Ta5d6ffpython3Ta5d6ff'
Te6edf3patches Tff7b72= Tb4b4b4[
Ta5d6ff'Ta5d6ffpatches/pyconfig_detection.patchTa5d6ff'Tb4b4b4,
Ta5d6ff'Ta5d6ffpatches/reproducible-buildinfo.diffTa5d6ff'Tb4b4b4,
T8b949e# Python 3.7.1
Tb4b4b4(Ta5d6ff'Ta5d6ffpatches/py3.7.1_fix-ctypes-util-find-library.patchTa5d6ff'Tb4b4b4, Te6edf3version_starts_withTb4b4b4(Ta5d6ff"Ta5d6ff3.7Ta5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff'Ta5d6ffpatches/py3.7.1_fix-zlib-version.patchTa5d6ff'Tb4b4b4, Te6edf3version_starts_withTb4b4b4(Ta5d6ff"Ta5d6ff3.7Ta5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4,
T8b949e# Python 3.8.1 & 3.9.X
Tb4b4b4(Ta5d6ff'Ta5d6ffpatches/py3.8.1.patchTa5d6ff'Tb4b4b4, Te6edf3version_starts_withTb4b4b4(Ta5d6ff"Ta5d6ff3.8Ta5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff'Ta5d6ffpatches/py3.8.1.patchTa5d6ff'Tb4b4b4, Te6edf3version_starts_withTb4b4b4(Ta5d6ff"Ta5d6ff3.9Ta5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff'Ta5d6ffpatches/py3.8.1.patchTa5d6ff'Tb4b4b4, Te6edf3version_starts_withTb4b4b4(Ta5d6ff"Ta5d6ff3.10Ta5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff'Ta5d6ffpatches/cpython-311-ctypes-find-library.patchTa5d6ff'Tb4b4b4, Te6edf3version_starts_withTb4b4b4(Ta5d6ff"Ta5d6ff3.11Ta5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4]
Tff7b72if Te6edf3shutilTff7b72.Td2a8ffwhichTb4b4b4(Ta5d6ff'Ta5d6fflldTa5d6ff'Tb4b4b4) Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Te6edf3patches Tff7b72+Tff7b72= Tb4b4b4[
Tb4b4b4(Ta5d6ff"Ta5d6ffpatches/py3.7.1_fix_cortex_a8.patchTa5d6ff"Tb4b4b4, Te6edf3version_starts_withTb4b4b4(Ta5d6ff"Ta5d6ff3.7Ta5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Ta5d6ffpatches/py3.8.1_fix_cortex_a8.patchTa5d6ff"Tb4b4b4, Te6edf3version_starts_withTb4b4b4(Ta5d6ff"Ta5d6ff3.8Ta5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Ta5d6ffpatches/py3.8.1_fix_cortex_a8.patchTa5d6ff"Tb4b4b4, Te6edf3version_starts_withTb4b4b4(Ta5d6ff"Ta5d6ff3.9Ta5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Ta5d6ffpatches/py3.8.1_fix_cortex_a8.patchTa5d6ff"Tb4b4b4, Te6edf3version_starts_withTb4b4b4(Ta5d6ff"Ta5d6ff3.10Ta5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4(Ta5d6ff"Ta5d6ffpatches/py3.8.1_fix_cortex_a8.patchTa5d6ff"Tb4b4b4, Te6edf3version_starts_withTb4b4b4(Ta5d6ff"Ta5d6ff3.11Ta5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4]
Te6edf3depends Tff7b72= Tb4b4b4[Ta5d6ff'Ta5d6ffhostpython3Ta5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ffsqlite3Ta5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ffopensslTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6fflibffiTa5d6ff'Tb4b4b4]
T8b949e# those optional depends allow us to build python compression modules:
T8b949e# - _bz2.so
T8b949e# - _lzma.so
Te6edf3opt_depends Tff7b72= Tb4b4b4[Ta5d6ff'Ta5d6fflibbz2Ta5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ffliblzmaTa5d6ff'Tb4b4b4]
T8b949e'''The optional libraries which we would like to get our python linked'''
Te6edf3configure_args Tff7b72= Tb4b4b4(
Ta5d6ff'Ta5d6ff--host=Tffd700{android_host}Ta5d6ff'Tb4b4b4,
Ta5d6ff'Ta5d6ff--build=Tffd700{android_build}Ta5d6ff'Tb4b4b4,
Ta5d6ff'Ta5d6ff--enable-sharedTa5d6ff'Tb4b4b4,
Ta5d6ff'Ta5d6ff--enable-ipv6Ta5d6ff'Tb4b4b4,
Ta5d6ff'Ta5d6ffac_cv_file__dev_ptmx=yesTa5d6ff'Tb4b4b4,
Ta5d6ff'Ta5d6ffac_cv_file__dev_ptc=noTa5d6ff'Tb4b4b4,
Ta5d6ff'Ta5d6ff--without-ensurepipTa5d6ff'Tb4b4b4,
Ta5d6ff'Ta5d6ffac_cv_little_endian_double=yesTa5d6ff'Tb4b4b4,
Ta5d6ff'Ta5d6ffac_cv_header_sys_eventfd_h=noTa5d6ff'Tb4b4b4,
Ta5d6ff'Ta5d6ff--prefix=Tffd700{prefix}Ta5d6ff'Tb4b4b4,
Ta5d6ff'Ta5d6ff--exec-prefix=Tffd700{exec_prefix}Ta5d6ff'Tb4b4b4,
Ta5d6ff'Ta5d6ff--enable-loadable-sqlite-extensionsTa5d6ff'
Tb4b4b4)
Tff7b72if Te6edf3version_starts_withTb4b4b4(Ta5d6ff"Ta5d6ff3.11Ta5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3configure_args Tff7b72+Tff7b72= Tb4b4b4(Ta5d6ff'Ta5d6ff--with-build-python=Tffd700{python_host_bin}Ta5d6ff'Tb4b4b4,Tb4b4b4)
T8b949e'''The configure arguments needed to build the python recipe. Those are
used in method :meth:`build_arch` (if not overwritten like python3's
recipe does).
'''
Te6edf3MIN_NDK_API Tff7b72= T79c0ff21
T8b949e'''Sets the minimal ndk api number needed to use the recipe.
.. warning:: This recipe can be built only against API 21+, so it means
that any class which inherits from class:`GuestPythonRecipe` will have
this limitation.
'''
Te6edf3stdlib_dir_blacklist Tff7b72= Tb4b4b4{
Ta5d6ff'Ta5d6ff__pycache__Ta5d6ff'Tb4b4b4,
Ta5d6ff'Ta5d6fftestTa5d6ff'Tb4b4b4,
Ta5d6ff'Ta5d6fftestsTa5d6ff'Tb4b4b4,
Ta5d6ff'Ta5d6fflib2to3Ta5d6ff'Tb4b4b4,
Ta5d6ff'Ta5d6ffensurepipTa5d6ff'Tb4b4b4,
Ta5d6ff'Ta5d6ffidlelibTa5d6ff'Tb4b4b4,
Ta5d6ff'Ta5d6fftkinterTa5d6ff'Tb4b4b4,
Tb4b4b4}
T8b949e'''The directories that we want to omit for our python bundle'''
Te6edf3stdlib_filen_blacklist Tff7b72= Tb4b4b4[
Ta5d6ff'Ta5d6ff*.pyTa5d6ff'Tb4b4b4,
Ta5d6ff'Ta5d6ff*.exeTa5d6ff'Tb4b4b4,
Ta5d6ff'Ta5d6ff*.whlTa5d6ff'Tb4b4b4,
Tb4b4b4]
T8b949e'''The file extensions that we want to blacklist for our python bundle'''
Te6edf3site_packages_dir_blacklist Tff7b72= Tb4b4b4{
Ta5d6ff'Ta5d6ff__pycache__Ta5d6ff'Tb4b4b4,
Ta5d6ff'Ta5d6fftestsTa5d6ff'
Tb4b4b4}
T8b949e'''The directories from site packages dir that we don't want to be included
in our python bundle.'''
Te6edf3site_packages_filen_blacklist Tff7b72= Tb4b4b4[
Ta5d6ff'Ta5d6ff*.pyTa5d6ff'
Tb4b4b4]
T8b949e'''The file extensions from site packages dir that we don't want to be
included in our python bundle.'''
Te6edf3compiled_extension Tff7b72= Ta5d6ff'Ta5d6ff.pycTa5d6ff'
T8b949e'''the default extension for compiled python files.
.. note:: the default extension for compiled python files has been .pyo for
python 2.x-3.4 but as of Python 3.5, the .pyo filename extension is no
longer used and has been removed in favour of extension .pyc
'''
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Tff7b72*Te6edf3argsTb4b4b4, Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ff_ctx Tff7b72= Tff7b72None
Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ff__init__Tb4b4b4(Tff7b72*Te6edf3argsTb4b4b4, Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)
Tf0883e@property
Tff7b72def Td2a8ff_libpythonTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e'''return the python's library name (with extension)'''
Tff7b72return Ta5d6ff'Ta5d6fflibpythonTffd700{link_version}Ta5d6ff.soTa5d6ff'Tff7b72.Td2a8ffformatTb4b4b4(
Te6edf3link_versionTff7b72=Tff7b72selfTff7b72.Td2a8fflink_version
Tb4b4b4)
Tf0883e@property
Tff7b72def Td2a8fflink_versionTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
T8b949e'''return the python's library link version e.g. 3.7m, 3.8'''
Te6edf3majorTb4b4b4, Te6edf3minor Tff7b72= Tff7b72selfTff7b72.Td2a8ffmajor_minor_version_stringTff7b72.Td2a8ffsplitTb4b4b4(Ta5d6ff'Ta5d6ff.Ta5d6ff'Tb4b4b4)
Te6edf3flags Tff7b72= Ta5d6ff'Ta5d6ff'
Tff7b72if Te6edf3major Tff7b72== Ta5d6ff'Ta5d6ff3Ta5d6ff' Tff7b72and Tffa657intTb4b4b4(Te6edf3minorTb4b4b4) Tff7b72< T79c0ff8Tb4b4b4:
Te6edf3flags Tff7b72+Tff7b72= Ta5d6ff'Ta5d6ffmTa5d6ff'
Tff7b72return Ta5d6ff'Tffd700{major}Ta5d6ff.Tffd700{minor}Tffd700{flags}Ta5d6ff'Tff7b72.Td2a8ffformatTb4b4b4(
Te6edf3majorTff7b72=Te6edf3majorTb4b4b4,
Te6edf3minorTff7b72=Te6edf3minorTb4b4b4,
Te6edf3flagsTff7b72=Te6edf3flags
Tb4b4b4)
Tff7b72def Td2a8ffinclude_rootTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3arch_nameTb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3joinTb4b4b4(Tff7b72selfTff7b72.Td2a8ffget_build_dirTb4b4b4(Te6edf3arch_nameTb4b4b4)Tb4b4b4, Ta5d6ff'Ta5d6ffIncludeTa5d6ff'Tb4b4b4)
Tff7b72def Td2a8fflink_rootTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3arch_nameTb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3joinTb4b4b4(Tff7b72selfTff7b72.Td2a8ffget_build_dirTb4b4b4(Te6edf3arch_nameTb4b4b4)Tb4b4b4, Ta5d6ff'Ta5d6ffandroid-buildTa5d6ff'Tb4b4b4)
Tff7b72def Td2a8ffshould_buildTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3archTb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72not Te6edf3PathTb4b4b4(Tff7b72selfTff7b72.Td2a8fflink_rootTb4b4b4(Te6edf3archTff7b72.Td2a8ffarchTb4b4b4)Tb4b4b4, Tff7b72selfTff7b72.Td2a8ff_libpythonTb4b4b4)Tff7b72.Td2a8ffis_fileTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffprebuild_archTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3archTb4b4b4)Tb4b4b4:
Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffprebuild_archTb4b4b4(Te6edf3archTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8ffpython_recipe Tff7b72= Tff7b72self
Tff7b72def Td2a8ffget_recipe_envTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3archTff7b72=Tff7b72NoneTb4b4b4, Te6edf3with_flags_in_ccTff7b72=Tff7b72TrueTb4b4b4)Tb4b4b4:
Te6edf3env Tff7b72= Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffget_recipe_envTb4b4b4(Te6edf3archTb4b4b4)
Te6edf3envTb4b4b4[Ta5d6ff'Ta5d6ffHOSTARCHTa5d6ff'Tb4b4b4] Tff7b72= Te6edf3archTff7b72.Td2a8ffcommand_prefix
Te6edf3envTb4b4b4[Ta5d6ff'Ta5d6ffCCTa5d6ff'Tb4b4b4] Tff7b72= Te6edf3archTff7b72.Td2a8ffget_clang_exeTb4b4b4(Te6edf3with_targetTff7b72=Tff7b72TrueTb4b4b4)
Te6edf3envTb4b4b4[Ta5d6ff'Ta5d6ffPATHTa5d6ff'Tb4b4b4] Tff7b72= Tb4b4b4(
Ta5d6ff'Tffd700{hostpython_dir}Ta5d6ff:Tffd700{old_path}Ta5d6ff'Tb4b4b4)Tff7b72.Td2a8ffformatTb4b4b4(
Te6edf3hostpython_dirTff7b72=Tff7b72selfTff7b72.Td2a8ffget_recipeTb4b4b4(
Ta5d6ff'Ta5d6ffhostTa5d6ff' Tff7b72+ Tff7b72selfTff7b72.Td2a8ffnameTb4b4b4, Tff7b72selfTff7b72.Td2a8ffctxTb4b4b4)Tff7b72.Td2a8ffget_path_to_pythonTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3old_pathTff7b72=Te6edf3envTb4b4b4[Ta5d6ff'Ta5d6ffPATHTa5d6ff'Tb4b4b4]Tb4b4b4)
Te6edf3envTb4b4b4[Ta5d6ff'Ta5d6ffCFLAGSTa5d6ff'Tb4b4b4] Tff7b72= Ta5d6ff'Ta5d6ff Ta5d6ff'Tff7b72.Td2a8ffjoinTb4b4b4(
Tb4b4b4[
Ta5d6ff'Ta5d6ff-fPICTa5d6ff'Tb4b4b4,
Ta5d6ff'Ta5d6ff-DANDROIDTa5d6ff'
Tb4b4b4]
Tb4b4b4)
Te6edf3envTb4b4b4[Ta5d6ff'Ta5d6ffLDFLAGSTa5d6ff'Tb4b4b4] Tff7b72= Te6edf3envTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff'Ta5d6ffLDFLAGSTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ff'Tb4b4b4)
Tff7b72if Te6edf3shutilTff7b72.Td2a8ffwhichTb4b4b4(Ta5d6ff'Ta5d6fflldTa5d6ff'Tb4b4b4) Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
T8b949e# Note: The -L. is to fix a bug in python 3.7.
T8b949e# https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=234409
Te6edf3envTb4b4b4[Ta5d6ff'Ta5d6ffLDFLAGSTa5d6ff'Tb4b4b4] Tff7b72+Tff7b72= Ta5d6ff'Ta5d6ff -L. -fuse-ld=lldTa5d6ff'
Tff7b72elseTb4b4b4:
Te6edf3warningTb4b4b4(Ta5d6ff'Ta5d6fflld not found, linking without it. Ta5d6ff'
Ta5d6ff'Ta5d6ffConsider installing lld if linker errors occur.Ta5d6ff'Tb4b4b4)
Tff7b72return Te6edf3env
Tff7b72def Td2a8ffset_libs_flagsTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3envTb4b4b4, Te6edf3archTb4b4b4)Tb4b4b4:
T8b949e'''Takes care to properly link libraries with python depending on our
requirements and the attribute :attr:`opt_depends`.
'''
Tff7b72def Td2a8ffadd_flagsTb4b4b4(Te6edf3include_flagsTb4b4b4, Te6edf3link_dirsTb4b4b4, Te6edf3link_libsTb4b4b4)Tb4b4b4:
Te6edf3envTb4b4b4[Ta5d6ff'Ta5d6ffCPPFLAGSTa5d6ff'Tb4b4b4] Tff7b72= Te6edf3envTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff'Ta5d6ffCPPFLAGSTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ff'Tb4b4b4) Tff7b72+ Te6edf3include_flags
Te6edf3envTb4b4b4[Ta5d6ff'Ta5d6ffLDFLAGSTa5d6ff'Tb4b4b4] Tff7b72= Te6edf3envTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff'Ta5d6ffLDFLAGSTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ff'Tb4b4b4) Tff7b72+ Te6edf3link_dirs
Te6edf3envTb4b4b4[Ta5d6ff'Ta5d6ffLIBSTa5d6ff'Tb4b4b4] Tff7b72= Te6edf3envTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff'Ta5d6ffLIBSTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ff'Tb4b4b4) Tff7b72+ Te6edf3link_libs
Tff7b72if Ta5d6ff'Ta5d6ffsqlite3Ta5d6ff' Tff7b72in Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8ffrecipe_build_orderTb4b4b4:
Te6edf3infoTb4b4b4(Ta5d6ff'Ta5d6ffActivating flags for sqlite3Ta5d6ff'Tb4b4b4)
Te6edf3recipe Tff7b72= Te6edf3RecipeTff7b72.Td2a8ffget_recipeTb4b4b4(Ta5d6ff'Ta5d6ffsqlite3Ta5d6ff'Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffctxTb4b4b4)
Te6edf3add_flagsTb4b4b4(Ta5d6ff'Ta5d6ff -ITa5d6ff' Tff7b72+ Te6edf3recipeTff7b72.Td2a8ffget_build_dirTb4b4b4(Te6edf3archTff7b72.Td2a8ffarchTb4b4b4)Tb4b4b4,
Ta5d6ff'Ta5d6ff -LTa5d6ff' Tff7b72+ Te6edf3recipeTff7b72.Td2a8ffget_lib_dirTb4b4b4(Te6edf3archTb4b4b4)Tb4b4b4, Ta5d6ff'Ta5d6ff -lsqlite3Ta5d6ff'Tb4b4b4)
Tff7b72if Ta5d6ff'Ta5d6fflibffiTa5d6ff' Tff7b72in Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8ffrecipe_build_orderTb4b4b4:
Te6edf3infoTb4b4b4(Ta5d6ff'Ta5d6ffActivating flags for libffiTa5d6ff'Tb4b4b4)
Te6edf3recipe Tff7b72= Te6edf3RecipeTff7b72.Td2a8ffget_recipeTb4b4b4(Ta5d6ff'Ta5d6fflibffiTa5d6ff'Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffctxTb4b4b4)
T8b949e# In order to force the correct linkage for our libffi library, we
T8b949e# set the following variable to point where is our libffi.pc file,
T8b949e# because the python build system uses pkg-config to configure it.
Te6edf3envTb4b4b4[Ta5d6ff'Ta5d6ffPKG_CONFIG_PATHTa5d6ff'Tb4b4b4] Tff7b72= Te6edf3recipeTff7b72.Td2a8ffget_build_dirTb4b4b4(Te6edf3archTff7b72.Td2a8ffarchTb4b4b4)
Te6edf3add_flagsTb4b4b4(Ta5d6ff'Ta5d6ff -ITa5d6ff' Tff7b72+ Ta5d6ff'Ta5d6ff -ITa5d6ff'Tff7b72.Td2a8ffjoinTb4b4b4(Te6edf3recipeTff7b72.Td2a8ffget_include_dirsTb4b4b4(Te6edf3archTb4b4b4)Tb4b4b4)Tb4b4b4,
Ta5d6ff'Ta5d6ff -LTa5d6ff' Tff7b72+ Te6edf3joinTb4b4b4(Te6edf3recipeTff7b72.Td2a8ffget_build_dirTb4b4b4(Te6edf3archTff7b72.Td2a8ffarchTb4b4b4)Tb4b4b4, Ta5d6ff'Ta5d6ff.libsTa5d6ff'Tb4b4b4)Tb4b4b4,
Ta5d6ff'Ta5d6ff -lffiTa5d6ff'Tb4b4b4)
Tff7b72if Ta5d6ff'Ta5d6ffopensslTa5d6ff' Tff7b72in Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8ffrecipe_build_orderTb4b4b4:
Te6edf3infoTb4b4b4(Ta5d6ff'Ta5d6ffActivating flags for opensslTa5d6ff'Tb4b4b4)
Te6edf3recipe Tff7b72= Te6edf3RecipeTff7b72.Td2a8ffget_recipeTb4b4b4(Ta5d6ff'Ta5d6ffopensslTa5d6ff'Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffctxTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffconfigure_args Tff7b72+Tff7b72= \
Tb4b4b4(Ta5d6ff'Ta5d6ff--with-openssl=Ta5d6ff' Tff7b72+ Te6edf3recipeTff7b72.Td2a8ffget_build_dirTb4b4b4(Te6edf3archTff7b72.Td2a8ffarchTb4b4b4)Tb4b4b4,Tb4b4b4)
Te6edf3add_flagsTb4b4b4(Te6edf3recipeTff7b72.Td2a8ffinclude_flagsTb4b4b4(Te6edf3archTb4b4b4)Tb4b4b4,
Te6edf3recipeTff7b72.Td2a8fflink_dirs_flagsTb4b4b4(Te6edf3archTb4b4b4)Tb4b4b4, Te6edf3recipeTff7b72.Td2a8fflink_libs_flagsTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72for Te6edf3library_name Tff7b72in Tb4b4b4{Ta5d6ff'Ta5d6fflibbz2Ta5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ffliblzmaTa5d6ff'Tb4b4b4}Tb4b4b4:
Tff7b72if Te6edf3library_name Tff7b72in Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8ffrecipe_build_orderTb4b4b4:
Te6edf3infoTb4b4b4(Ta5d6fffTa5d6ff'Ta5d6ffActivating flags for Tffd700{Te6edf3library_nameTffd700}Ta5d6ff'Tb4b4b4)
Te6edf3recipe Tff7b72= Te6edf3RecipeTff7b72.Td2a8ffget_recipeTb4b4b4(Te6edf3library_nameTb4b4b4, Tff7b72selfTff7b72.Td2a8ffctxTb4b4b4)
Te6edf3add_flagsTb4b4b4(Te6edf3recipeTff7b72.Td2a8ffget_library_includesTb4b4b4(Te6edf3archTb4b4b4)Tb4b4b4,
Te6edf3recipeTff7b72.Td2a8ffget_library_ldflagsTb4b4b4(Te6edf3archTb4b4b4)Tb4b4b4,
Te6edf3recipeTff7b72.Td2a8ffget_library_libs_flagTb4b4b4(Tb4b4b4)Tb4b4b4)
T8b949e# python build system contains hardcoded zlib version which prevents
T8b949e# the build of zlib module, here we search for android's zlib version
T8b949e# and sets the right flags, so python can be build with android's zlib
Te6edf3infoTb4b4b4(Ta5d6ff"Ta5d6ffActivating flags for androidTa5d6ff'Ta5d6ffs zlibTa5d6ff"Tb4b4b4)
Te6edf3zlib_lib_path Tff7b72= Te6edf3archTff7b72.Td2a8ffndk_lib_dir_versioned
Te6edf3zlib_includes Tff7b72= Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8ffndkTff7b72.Td2a8ffsysroot_include_dir
Te6edf3zlib_h Tff7b72= Te6edf3joinTb4b4b4(Te6edf3zlib_includesTb4b4b4, Ta5d6ff'Ta5d6ffzlib.hTa5d6ff'Tb4b4b4)
Tff7b72tryTb4b4b4:
Tff7b72with Tffa657openTb4b4b4(Te6edf3zlib_hTb4b4b4) Tff7b72as Te6edf3filehTb4b4b4:
Te6edf3zlib_data Tff7b72= Te6edf3filehTff7b72.Td2a8ffreadTb4b4b4(Tb4b4b4)
Tff7b72except Tf85149IOErrorTb4b4b4:
Tff7b72raise Te6edf3BuildInterruptingExceptionTb4b4b4(
Ta5d6ff"Ta5d6ffCould not determine androidTa5d6ff'Ta5d6ffs zlib version, no zlib.h (Tffd700{}Ta5d6ff) inTa5d6ff"
Ta5d6ff"Ta5d6ff the NDK dir includesTa5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3zlib_hTb4b4b4)
Tb4b4b4)
Tff7b72for Te6edf3line Tff7b72in Te6edf3zlib_dataTff7b72.Td2a8ffsplitTb4b4b4(Ta5d6ff'Tffea00\nTa5d6ff'Tb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3lineTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff'Ta5d6ff#define ZLIB_VERSION Ta5d6ff'Tb4b4b4)Tb4b4b4:
Tff7b72break
Tff7b72elseTb4b4b4:
Tff7b72raise Te6edf3BuildInterruptingExceptionTb4b4b4(
Ta5d6ff'Ta5d6ffCould not parse zlib.h...so we cannot find zlib version,Ta5d6ff'
Ta5d6ff'Ta5d6ffrequired by python build,Ta5d6ff'
Tb4b4b4)
Te6edf3envTb4b4b4[Ta5d6ff'Ta5d6ffZLIB_VERSIONTa5d6ff'Tb4b4b4] Tff7b72= Te6edf3lineTff7b72.Td2a8ffreplaceTb4b4b4(Ta5d6ff'Ta5d6ff#define ZLIB_VERSION Ta5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ff'Tb4b4b4)
Te6edf3add_flagsTb4b4b4(Ta5d6ff'Ta5d6ff -ITa5d6ff' Tff7b72+ Te6edf3zlib_includesTb4b4b4, Ta5d6ff'Ta5d6ff -LTa5d6ff' Tff7b72+ Te6edf3zlib_lib_pathTb4b4b4, Ta5d6ff'Ta5d6ff -lzTa5d6ff'Tb4b4b4)
Tff7b72return Te6edf3env
Tff7b72def Td2a8ffbuild_archTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3archTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8ffndk_api Tff7b72< Tff7b72selfTff7b72.Td2a8ffMIN_NDK_APITb4b4b4:
Tff7b72raise Te6edf3BuildInterruptingExceptionTb4b4b4(
Te6edf3NDK_API_LOWER_THAN_SUPPORTED_MESSAGETff7b72.Td2a8ffformatTb4b4b4(
Te6edf3ndk_apiTff7b72=Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8ffndk_apiTb4b4b4, Te6edf3min_ndk_apiTff7b72=Tff7b72selfTff7b72.Td2a8ffMIN_NDK_API
Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Te6edf3recipe_build_dir Tff7b72= Tff7b72selfTff7b72.Td2a8ffget_build_dirTb4b4b4(Te6edf3archTff7b72.Td2a8ffarchTb4b4b4)
T8b949e# Create a subdirectory to actually perform the build
Te6edf3build_dir Tff7b72= Te6edf3joinTb4b4b4(Te6edf3recipe_build_dirTb4b4b4, Ta5d6ff'Ta5d6ffandroid-buildTa5d6ff'Tb4b4b4)
Te6edf3ensure_dirTb4b4b4(Te6edf3build_dirTb4b4b4)
T8b949e# TODO: Get these dynamically, like bpo-30386 does
Te6edf3sys_prefix Tff7b72= Ta5d6ff'Ta5d6ff/usr/localTa5d6ff'
Te6edf3sys_exec_prefix Tff7b72= Ta5d6ff'Ta5d6ff/usr/localTa5d6ff'
Te6edf3env Tff7b72= Tff7b72selfTff7b72.Td2a8ffget_recipe_envTb4b4b4(Te6edf3archTb4b4b4)
Te6edf3env Tff7b72= Tff7b72selfTff7b72.Td2a8ffset_libs_flagsTb4b4b4(Te6edf3envTb4b4b4, Te6edf3archTb4b4b4)
Te6edf3android_build Tff7b72= Te6edf3shTff7b72.Td2a8ffCommandTb4b4b4(
Te6edf3joinTb4b4b4(Te6edf3recipe_build_dirTb4b4b4,
Ta5d6ff'Ta5d6ffconfig.guessTa5d6ff'Tb4b4b4)Tb4b4b4)Tb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)
Tff7b72with Te6edf3current_directoryTb4b4b4(Te6edf3build_dirTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Te6edf3existsTb4b4b4(Ta5d6ff'Ta5d6ffconfig.statusTa5d6ff'Tb4b4b4)Tb4b4b4:
Te6edf3shprintTb4b4b4(
Te6edf3shTff7b72.Td2a8ffCommandTb4b4b4(Te6edf3joinTb4b4b4(Te6edf3recipe_build_dirTb4b4b4, Ta5d6ff'Ta5d6ffconfigureTa5d6ff'Tb4b4b4)Tb4b4b4)Tb4b4b4,
Tff7b72*Tb4b4b4(Ta5d6ff'Ta5d6ff Ta5d6ff'Tff7b72.Td2a8ffjoinTb4b4b4(Tff7b72selfTff7b72.Td2a8ffconfigure_argsTb4b4b4)Tff7b72.Td2a8ffformatTb4b4b4(
Te6edf3android_hostTff7b72=Te6edf3envTb4b4b4[Ta5d6ff'Ta5d6ffHOSTARCHTa5d6ff'Tb4b4b4]Tb4b4b4,
Te6edf3android_buildTff7b72=Te6edf3android_buildTb4b4b4,
Te6edf3python_host_binTff7b72=Te6edf3joinTb4b4b4(Tff7b72selfTff7b72.Td2a8ffget_recipeTb4b4b4(
Ta5d6ff'Ta5d6ffhostTa5d6ff' Tff7b72+ Tff7b72selfTff7b72.Td2a8ffnameTb4b4b4, Tff7b72selfTff7b72.Td2a8ffctx
Tb4b4b4)Tff7b72.Td2a8ffget_path_to_pythonTb4b4b4(Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffpython3Ta5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3prefixTff7b72=Te6edf3sys_prefixTb4b4b4,
Te6edf3exec_prefixTff7b72=Te6edf3sys_exec_prefixTb4b4b4)Tb4b4b4)Tff7b72.Td2a8ffsplitTb4b4b4(Ta5d6ff'Ta5d6ff Ta5d6ff'Tb4b4b4)Tb4b4b4,
Te6edf3_envTff7b72=Te6edf3envTb4b4b4)
T8b949e# Python build does not seem to play well with make -j option from Python 3.11 and onwards
T8b949e# Before losing some time, please check issue
T8b949e# https://github.com/python/cpython/issues/101295 , as the root cause looks similar
Te6edf3shprintTb4b4b4(
Te6edf3shTff7b72.Td2a8ffmakeTb4b4b4,
Ta5d6ff'Ta5d6ffallTa5d6ff'Tb4b4b4,
Ta5d6ff'Ta5d6ffINSTSONAME=Tffd700{lib_name}Ta5d6ff'Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3lib_nameTff7b72=Tff7b72selfTff7b72.Td2a8ff_libpythonTb4b4b4)Tb4b4b4,
Te6edf3_envTff7b72=Te6edf3env
Tb4b4b4)
T8b949e# TODO: Look into passing the path to pyconfig.h in a
T8b949e# better way, although this is probably acceptable
Te6edf3shTff7b72.Td2a8ffcpTb4b4b4(Ta5d6ff'Ta5d6ffpyconfig.hTa5d6ff'Tb4b4b4, Te6edf3joinTb4b4b4(Te6edf3recipe_build_dirTb4b4b4, Ta5d6ff'Ta5d6ffIncludeTa5d6ff'Tb4b4b4)Tb4b4b4)
Tff7b72def Td2a8ffcompile_python_filesTb4b4b4(Tff7b72selfTb4b4b4, Tffa657dirTb4b4b4)Tb4b4b4:
T8b949e'''
Compile the python files (recursively) for the python files inside
a given folder.
.. note:: python2 compiles the files into extension .pyo, but in
python3, and as of Python 3.5, the .pyo filename extension is no
longer used...uses .pyc (https://www.python.org/dev/peps/pep-0488)
'''
Te6edf3args Tff7b72= Tb4b4b4[Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8ffhostpythonTb4b4b4]
Te6edf3args Tff7b72+Tff7b72= Tb4b4b4[Ta5d6ff'Ta5d6ff-OOTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ff-mTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ffcompileallTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ff-bTa5d6ff'Tb4b4b4, Ta5d6ff'Ta5d6ff-fTa5d6ff'Tb4b4b4, Tffa657dirTb4b4b4]
Te6edf3subprocessTff7b72.Td2a8ffcallTb4b4b4(Te6edf3argsTb4b4b4)
Tff7b72def Td2a8ffcreate_python_bundleTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3dirnTb4b4b4, Te6edf3archTb4b4b4)Tb4b4b4:
T8b949e"""
Create a packaged python bundle in the target directory, by
copying all the modules and standard library to the right
place.
"""
T8b949e# Todo: find a better way to find the build libs folder
Te6edf3modules_build_dir Tff7b72= Te6edf3joinTb4b4b4(
Tff7b72selfTff7b72.Td2a8ffget_build_dirTb4b4b4(Te6edf3archTff7b72.Td2a8ffarchTb4b4b4)Tb4b4b4,
Ta5d6ff'Ta5d6ffandroid-buildTa5d6ff'Tb4b4b4,
Ta5d6ff'Ta5d6ffbuildTa5d6ff'Tb4b4b4,
Ta5d6ff'Ta5d6fflib.linuxTffd700{}Ta5d6ff-Tffd700{}Ta5d6ff-Tffd700{}Ta5d6ff'Tff7b72.Td2a8ffformatTb4b4b4(
Ta5d6ff'Ta5d6ff2Ta5d6ff' Tff7b72if Tff7b72selfTff7b72.Td2a8ffversionTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72== Ta5d6ff'Ta5d6ff2Ta5d6ff' Tff7b72else Ta5d6ff'Ta5d6ff'Tb4b4b4,
Te6edf3archTff7b72.Td2a8ffcommand_prefixTff7b72.Td2a8ffsplitTb4b4b4(Ta5d6ff'Ta5d6ff-Ta5d6ff'Tb4b4b4)Tb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4,
Tff7b72selfTff7b72.Td2a8ffmajor_minor_version_string
Tb4b4b4)Tb4b4b4)
T8b949e# Compile to *.pyc the python modules
Tff7b72selfTff7b72.Td2a8ffcompile_python_filesTb4b4b4(Te6edf3modules_build_dirTb4b4b4)
T8b949e# Compile to *.pyc the standard python library
Tff7b72selfTff7b72.Td2a8ffcompile_python_filesTb4b4b4(Te6edf3joinTb4b4b4(Tff7b72selfTff7b72.Td2a8ffget_build_dirTb4b4b4(Te6edf3archTff7b72.Td2a8ffarchTb4b4b4)Tb4b4b4, Ta5d6ff'Ta5d6ffLibTa5d6ff'Tb4b4b4)Tb4b4b4)
T8b949e# Compile to *.pyc the other python packages (site-packages)
Tff7b72selfTff7b72.Td2a8ffcompile_python_filesTb4b4b4(Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8ffget_python_install_dirTb4b4b4(Te6edf3archTff7b72.Td2a8ffarchTb4b4b4)Tb4b4b4)
T8b949e# Bundle compiled python modules to a folder
Te6edf3modules_dir Tff7b72= Te6edf3joinTb4b4b4(Te6edf3dirnTb4b4b4, Ta5d6ff'Ta5d6ffmodulesTa5d6ff'Tb4b4b4)
Te6edf3c_ext Tff7b72= Tff7b72selfTff7b72.Td2a8ffcompiled_extension
Te6edf3ensure_dirTb4b4b4(Te6edf3modules_dirTb4b4b4)
Te6edf3module_filens Tff7b72= Tb4b4b4(Te6edf3globTff7b72.Td2a8ffglobTb4b4b4(Te6edf3joinTb4b4b4(Te6edf3modules_build_dirTb4b4b4, Ta5d6ff'Ta5d6ff*.soTa5d6ff'Tb4b4b4)Tb4b4b4) Tff7b72+
Te6edf3globTff7b72.Td2a8ffglobTb4b4b4(Te6edf3joinTb4b4b4(Te6edf3modules_build_dirTb4b4b4, Ta5d6ff'Ta5d6ff*Ta5d6ff' Tff7b72+ Te6edf3c_extTb4b4b4)Tb4b4b4)Tb4b4b4)
Te6edf3infoTb4b4b4(Ta5d6ff"Ta5d6ffCopy Tffd700{}Ta5d6ff files into the bundleTa5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Tffa657lenTb4b4b4(Te6edf3module_filensTb4b4b4)Tb4b4b4)Tb4b4b4)
Tff7b72for Te6edf3filen Tff7b72in Te6edf3module_filensTb4b4b4:
Te6edf3infoTb4b4b4(Ta5d6ff"Ta5d6ff - copy Tffd700{}Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3filenTb4b4b4)Tb4b4b4)
Te6edf3shutilTff7b72.Td2a8ffcopy2Tb4b4b4(Te6edf3filenTb4b4b4, Te6edf3modules_dirTb4b4b4)
T8b949e# zip up the standard library
Te6edf3stdlib_zip Tff7b72= Te6edf3joinTb4b4b4(Te6edf3dirnTb4b4b4, Ta5d6ff'Ta5d6ffstdlib.zipTa5d6ff'Tb4b4b4)
Tff7b72with Te6edf3current_directoryTb4b4b4(Te6edf3joinTb4b4b4(Tff7b72selfTff7b72.Td2a8ffget_build_dirTb4b4b4(Te6edf3archTff7b72.Td2a8ffarchTb4b4b4)Tb4b4b4, Ta5d6ff'Ta5d6ffLibTa5d6ff'Tb4b4b4)Tb4b4b4)Tb4b4b4:
Te6edf3stdlib_filens Tff7b72= Tffa657listTb4b4b4(Te6edf3walk_valid_filensTb4b4b4(
Ta5d6ff'Ta5d6ff.Ta5d6ff'Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffstdlib_dir_blacklistTb4b4b4, Tff7b72selfTff7b72.Td2a8ffstdlib_filen_blacklistTb4b4b4)Tb4b4b4)
Tff7b72if Ta5d6ff'Ta5d6ffSOURCE_DATE_EPOCHTa5d6ff' Tff7b72in Te6edf3environTb4b4b4:
T8b949e# for reproducible builds
Te6edf3stdlib_filensTff7b72.Td2a8ffsortTb4b4b4(Tb4b4b4)
Te6edf3timestamp Tff7b72= Tffa657intTb4b4b4(Te6edf3environTb4b4b4[Ta5d6ff'Ta5d6ffSOURCE_DATE_EPOCHTa5d6ff'Tb4b4b4]Tb4b4b4)
Tff7b72for Te6edf3filen Tff7b72in Te6edf3stdlib_filensTb4b4b4:
Te6edf3utimeTb4b4b4(Te6edf3filenTb4b4b4, Tb4b4b4(Te6edf3timestampTb4b4b4, Te6edf3timestampTb4b4b4)Tb4b4b4)
Te6edf3infoTb4b4b4(Ta5d6ff"Ta5d6ffZip Tffd700{}Ta5d6ff files into the bundleTa5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Tffa657lenTb4b4b4(Te6edf3stdlib_filensTb4b4b4)Tb4b4b4)Tb4b4b4)
Te6edf3shprintTb4b4b4(Te6edf3shTff7b72.Td2a8ffzipTb4b4b4, Ta5d6ff'Ta5d6ff-XTa5d6ff'Tb4b4b4, Te6edf3stdlib_zipTb4b4b4, Tff7b72*Te6edf3stdlib_filensTb4b4b4)
T8b949e# copy the site-packages into place
Te6edf3ensure_dirTb4b4b4(Te6edf3joinTb4b4b4(Te6edf3dirnTb4b4b4, Ta5d6ff'Ta5d6ffsite-packagesTa5d6ff'Tb4b4b4)Tb4b4b4)
Te6edf3ensure_dirTb4b4b4(Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8ffget_python_install_dirTb4b4b4(Te6edf3archTff7b72.Td2a8ffarchTb4b4b4)Tb4b4b4)
T8b949e# TODO: Improve the API around walking and copying the files
Tff7b72with Te6edf3current_directoryTb4b4b4(Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8ffget_python_install_dirTb4b4b4(Te6edf3archTff7b72.Td2a8ffarchTb4b4b4)Tb4b4b4)Tb4b4b4:
Te6edf3filens Tff7b72= Tffa657listTb4b4b4(Te6edf3walk_valid_filensTb4b4b4(
Ta5d6ff'Ta5d6ff.Ta5d6ff'Tb4b4b4, Tff7b72selfTff7b72.Td2a8ffsite_packages_dir_blacklistTb4b4b4,
Tff7b72selfTff7b72.Td2a8ffsite_packages_filen_blacklistTb4b4b4)Tb4b4b4)
Te6edf3infoTb4b4b4(Ta5d6ff"Ta5d6ffCopy Tffd700{}Ta5d6ff files into the site-packagesTa5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Tffa657lenTb4b4b4(Te6edf3filensTb4b4b4)Tb4b4b4)Tb4b4b4)
Tff7b72for Te6edf3filen Tff7b72in Te6edf3filensTb4b4b4:
Te6edf3infoTb4b4b4(Ta5d6ff"Ta5d6ff - copy Tffd700{}Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3filenTb4b4b4)Tb4b4b4)
Te6edf3ensure_dirTb4b4b4(Te6edf3joinTb4b4b4(Te6edf3dirnTb4b4b4, Ta5d6ff'Ta5d6ffsite-packagesTa5d6ff'Tb4b4b4, Te6edf3dirnameTb4b4b4(Te6edf3filenTb4b4b4)Tb4b4b4)Tb4b4b4)
Te6edf3shutilTff7b72.Td2a8ffcopy2Tb4b4b4(Te6edf3filenTb4b4b4, Te6edf3joinTb4b4b4(Te6edf3dirnTb4b4b4, Ta5d6ff'Ta5d6ffsite-packagesTa5d6ff'Tb4b4b4, Te6edf3filenTb4b4b4)Tb4b4b4)
T8b949e# copy the python .so files into place
Te6edf3python_build_dir Tff7b72= Te6edf3joinTb4b4b4(Tff7b72selfTff7b72.Td2a8ffget_build_dirTb4b4b4(Te6edf3archTff7b72.Td2a8ffarchTb4b4b4)Tb4b4b4,
Ta5d6ff'Ta5d6ffandroid-buildTa5d6ff'Tb4b4b4)
Te6edf3python_lib_name Tff7b72= Ta5d6ff'Ta5d6fflibpythonTa5d6ff' Tff7b72+ Tff7b72selfTff7b72.Td2a8fflink_version
Te6edf3shprintTb4b4b4(
Te6edf3shTff7b72.Td2a8ffcpTb4b4b4,
Te6edf3joinTb4b4b4(Te6edf3python_build_dirTb4b4b4, Te6edf3python_lib_name Tff7b72+ Ta5d6ff'Ta5d6ff.soTa5d6ff'Tb4b4b4)Tb4b4b4,
Te6edf3joinTb4b4b4(Tff7b72selfTff7b72.Td2a8ffctxTff7b72.Td2a8ffbootstrapTff7b72.Td2a8ffdist_dirTb4b4b4, Ta5d6ff'Ta5d6fflibsTa5d6ff'Tb4b4b4, Te6edf3archTff7b72.Td2a8ffarchTb4b4b4)
Tb4b4b4)
Te6edf3infoTb4b4b4(Ta5d6ff'Ta5d6ffRenaming .so files to reflect cross-compileTa5d6ff'Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffreduce_object_file_namesTb4b4b4(Te6edf3joinTb4b4b4(Te6edf3dirnTb4b4b4, Ta5d6ff'Ta5d6ffsite-packagesTa5d6ff'Tb4b4b4)Tb4b4b4)
Tff7b72return Te6edf3joinTb4b4b4(Te6edf3dirnTb4b4b4, Ta5d6ff'Ta5d6ffsite-packagesTa5d6ff'Tb4b4b4)
Te6edf3recipe Tff7b72= Te6edf3Python3RecipeTb4b4b4(Tb4b4b4)
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────